package com.example.behaviorpattern.visitor.impl;

import com.example.behaviorpattern.visitor.Element;
import com.example.behaviorpattern.visitor.Visitor;

/**
 * 具体访问者B
 *
 * @author yaojianfeng
 */
public class ConcreteVisitorB implements Visitor {
    @Override
    public void visit(Element element) {
        element.operation(element1 -> {
                    // 具体操作
                    if (element1 instanceof ConcreteElementA elementA) {
                        System.out.println(elementA.name() + elementA.value());
                    } else if (element1 instanceof ConcreteElementB elementB) {
                        visitB(elementB);
                    } else {
                        System.out.println("该元素类型不支持");
                    }
                }
        );
    }

    /**
     * 访问具体元素B 的具体方法
     *
     * @param element 具体元素B
     */
    private void visitB(ConcreteElementB element) {
        System.out.println("具体访问者B访问元素B");
        System.out.println("元素B的名字：" + element.name());
        System.out.println("元素B的值：" + element.value());
    }
}